/**
 * 如果a.b的值为undefined，则可能有几种情况，如何判断？为什么说使用hasOwnProperty进行判断是不够严谨的

情况1：a上没有b,但是原型链上有b并且值为undefined
情况2：a上有b但是值为undefined
情况3：a上没有b，并且其原型链上也没有b
 * @param {*} obj 
 * @param {*} prop 
 * @returns 
 */
function isUndefined(obj, prop) {
  let _case = 0;
  let _stash = Object.getPrototypeOf(obj);

  const _t1 = prop in obj;
  // 判断完，设置原型为Null,这样t2就是本身的判断
  Object.setPrototypeOf(obj, null);
  const _t2 = prop in obj;
  Object.setPrototypeOf(obj, _stash);

  if (!_t1) {
    _case = 3;
  } else if (_t2) {
    _case = 2;
  } else {
    _case = 1;
  }

  return _case;
}

// egg:
let obj = { a: undefined, b: 1 };
let obj1 = {};
Object.prototype.a = undefined;
console.log(isUndefined(obj1, "a"));
